Damage function

import numpy as np
import plotly.graph_objects as go
γ1 = 0.00017675
γ2 = 2*0.0022
γ3_list = np.array([0, 2*0.0197, 2*0.3853])
threshold = np.arange(1.7, 2+0.05, 0.05)
x= np.linspace(0,5,500)


fig = go.Figure()

for step in threshold:
    for γ3,  name, color in zip(γ3_list, ["low", "high", "extreme"], ["red", "darkblue", "darkgreen"]):
        fig.add_trace(go.Scatter(x=x, y=np.exp( - γ1*x - γ2/2*x**2 - γ3/2*(x - step)**2*(x>step)),
                                 visible=False, line={'color': color, "width": 4}, name=name+" damage"))

fig.data[-1].visible=True
fig.data[-2].visible=True
fig.data[-3].visible=True
steps = []
for i in range(len(threshold)):
    # Hide all traces
    step = dict(
        method ='restyle',
        args = [{'visible': [False] * len(fig.data)},
               {"title": "ȳ = {:.2f}".format(threshold[i])}],
        label="ȳ = {:.2f}".format(threshold[i])
    )
    # Enable the two traces we want to see
    step['args'][0]["visible"][3*i] = True
    step['args'][0]["visible"][3*i+1] = True
    step['args'][0]["visible"][3*i+2] = True
#     step['args'][0]["visible"][4*i+3] = True

    # Add step to step list
    steps.append(step)

fig.update_xaxes(
    showline=True,
#     linecolor="black",
    range=[0,5]
)
fig.update_yaxes(
    showline=True,
    range=[0,1.03]
)


sliders = [dict(
    active=6,
    currentvalue={"prefix": "threshold  "},
    steps = steps,
#     name = "ȳ",
)]

fig.update_layout(
    title=r'$\exp(-n)$',
    sliders=sliders,
    font=dict(size=20),
    template="none"
)
fig.show()
# fig.write_html("damage_experiment.html")
γ1 = 0.00017675
γ2 = 2*0.0022
y_bar = 2
γ3_list = np.array([0, 2*0.0197, 2*0.3853])
threshold = np.arange(1.7, 2-0.01, 0.05)
x= np.linspace(0,5,500)


fig = go.Figure()

for step in threshold:
    for γ3,  name, color in zip(γ3_list, ["low", "high", "extreme"], ["red", "darkblue", "darkgreen"]):
        logN =  γ1*x + γ2/2*x**2
        logN += γ3/2*(x - y_bar)**2*(x>y_bar) + γ3/2*(x-step)**2/(y_bar-step)**2*(y_bar-x)**2*((x>step)&(x<y_bar))
        fig.add_trace(go.Scatter(x=x, y=np.exp(-logN),
                                 visible=False, line={'color': color, "width": 4}, name=name+" damage"))

fig.data[-1].visible=True
fig.data[-2].visible=True
fig.data[-3].visible=True
steps = []
for i in range(len(threshold)):
    # Hide all traces
    step = dict(
        method ='restyle',
        args = [{'visible': [False] * len(fig.data)},
               {"title": "ỹ = {:.2f}".format(threshold[i])}],
        label="ỹ = {:.2f}".format(threshold[i])
    )
    step['args'][0]["visible"][3*i] = True
    step['args'][0]["visible"][3*i+1] = True
    step['args'][0]["visible"][3*i+2] = True
    steps.append(step)

fig.update_xaxes(
    showline=True,
    linecolor="black",
    range=[0,5]
)
fig.update_yaxes(
    showline=True,
    range=[0,1.04]
)


sliders = [dict(
    active=5,
    currentvalue={"prefix": "threshold  "},
    steps = steps,
    pad={"t":50},
#     name = "ȳ",
)]
fig.update_layout(
    title=r'$\exp(-n)$',
    sliders=sliders,
    font=dict(size=20),
    template="none"
)
fig.show()
# fig.write_html("damage_experiment2.html", include_mathjax='cdn')